from __future__ import annotations
from typing import List

from docx import Document
from docx.enum.text import WD_LINE_SPACING
from docx.opc.oxml import qn
from docx.shared import Pt, RGBColor, Cm


class Task:
    def __init__(self, metaSource:MetaSource, spec: str, wordLength: int):
        self.metaSource = metaSource
        self.spec = spec
        self.wordLength = wordLength
    id:int = None;
    spec:str = None; #要求
    wordLength:int = None;#字数


class MetaSource:
    def __init__(self, overview, functions, performances):
        self.overview = overview
        self.functions = functions
        self.performances = performances
    overview:str = None;
    functins:str = None;
    performances:str = None;


    doc = Document()

    paragraph = doc.add_paragraph("123\n456\n789");
      # 1. 设置行距为1.5倍
    paragraph.paragraph_format.line_spacing_rule = WD_LINE_SPACING.MULTIPLE  # 多倍行距模式
    paragraph.paragraph_format.line_spacing = 1.5  # 1.5倍行距
      # 由于python-docx原生不支持直接设置字体为宋体，我们可以尝试通过段落样式来实现
    paragraph.paragraph_format.first_line_indent = Cm(0.75)  # 两个中文字符的宽度

      # paragraph.style.font.name = '宋体'  # 注意：这种方法在某些情况下可能不工作，因为Word的限制或字体支持问题。
      #
      # # 设置字体大小为四号字，四号字大约等于12磅（pt）
      # paragraph.style.font.size = Pt(12)
      # 3. 设置字体（需遍历所有Run设置）
    for run in paragraph.runs:
          run.font.name = '宋体'  # 设置字体
          run.font.size = Pt(14)  # 四号字（14磅）

          # 确保中文字体生效（重要！）
          run._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
        # TODO 添加正文
      # 设置行距为1.5倍行距
      # 注意：直接设置行距在python-docx中比较复杂，通常需要修改底层XML结构
      # para_xml = paragraph._element.xpath[0]  # 获取段落的XML元素
      # para_xml.set(qn('w:lineSpacing'), '360')  # 设置行距为360 twips（1 twip = 1/20 point）
      # para_xml.set(qn('w:spacing'), '156')  # 设置额外的行间距为156 twips（大约是1.5倍行距）

      # 设置首行缩进两个字符（大约是2个字符宽度）
      # 注意：字符宽度依赖于字体，这里使用Inches(0.5)仅为示例，实际应根据字体大小调整
      # paragraph.paragraph_format.first_line_indent = Inches(0.5)  # 这里的Inches(0.5)仅为示例，实际应根据字体大小调整

    doc.save('test1.docx')
# doc.add_paragraph("测试")
# run = doc.paragraphs[0].add_run('这是添加到第一个段落的文本')
#
# run.bold = True
# run.font.size = Pt(12)
# run.font.color.rgb = RGBColor(0,255,0)
# doc.save('test.docx')